import axios from 'axios';
import { ElMessage } from 'element-plus';
import { getToken } from '@/utils/auth';
import errorCode from '@/utils/errorCode';

const baseURL = import.meta.env.VITE_APP_BASE_API;

export default {
    /**
     * 上传文件
     * @param {File|Blob} file - 要上传的文件对象
     * @param {Object} [extraData={}] - 附加数据，将与文件一起上传
     * @param {function} [onProgress] - 上传进度回调函数，参数为百分比（0~100）
     */
    upload(file, extraData = {}, onProgress) {
        const formData = new FormData();
        formData.append('file', file);
        Object.keys(extraData).forEach((key) => {
            formData.append(key, extraData[key]);
        });

        return axios({
            method: 'post',
            url: `${baseURL}/system/file/upload`, // 根据实际接口地址调整
            data: formData,
            headers: {
                "Authorization": `Bearer ${getToken()}`,
                'Content-Type': "multipart/form-data"
                // 不要手动设置 'Content-Type'
            },
            // 上传进度回调
            onUploadProgress: (event) => {
                if (event.total > 0 && onProgress) {
                    const percentCompleted = Math.round((event.loaded * 100) / event.total);
                    onProgress(percentCompleted);
                }
            },
        })
            .then((res) => {
                if (res.data && res.data.isSuccess) {
                    return res.data;
                } else {
                    return Promise.reject(res);

                }
            })
            .catch((error) => {
                console.error(error);
                let errMsg = '系统异常'
                if (error.status == 200) {
                    errMsg =
                        (error.data && error.data.msg) ||
                        errorCode[error.data.code] ||
                        '上传失败';
                }
                return Promise.reject(errMsg);
            });
    },
};
